/*
 * TipoDespesaBusinessDelegateImpl.java
 *
 * Created on 19 de Junho de 2007, 14:30
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package br.com.esp.agendafinanceira.delegate.impl;

import br.com.esp.agendafinanceira.delegate.TipoDespesaBusinessDelegate;
import br.com.esp.agendafinanceira.exception.I18NException;
import br.com.esp.agendafinanceira.form.TipoDespesaForm;
import br.com.esp.agendafinanceira.locator.ServiceLocator;
import br.com.esp.agendafinanceira.servico.ITipoDespesaFacade;
import br.com.esp.agendafinanceira.to.TipoDespesaTO;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author David
 */
public class TipoDespesaBusinessDelegateImpl extends AbstractGenericBusinessDelegate
            implements TipoDespesaBusinessDelegate {
    
    /**
     * Creates a new instance of TipoDespesaBusinessDelegateImpl
     */
    public TipoDespesaBusinessDelegateImpl() {
        super();
    }
    
    public ITipoDespesaFacade getService() throws I18NException {
        return (ITipoDespesaFacade) getServiceLocator()
            .lookupService(ServiceLocator.TIPO_DESPESA_SERVICE);
    }

    public List<TipoDespesaForm> findAllByUsuarioId(Serializable id) throws I18NException {
        List<TipoDespesaForm> despesasForm = new ArrayList<TipoDespesaForm>();
        
        List<TipoDespesaTO> despesasTO = new ArrayList<TipoDespesaTO>();
        
        despesasTO = getService().findAllByUsuarioId(id);
        
        despesasForm = this.covertLists(despesasTO);
        
        return despesasForm;
    }
    
    private List<TipoDespesaForm> covertLists(final List<TipoDespesaTO> listTO) {
        List<TipoDespesaForm> forms = new ArrayList<TipoDespesaForm>();
        
        TipoDespesaForm form = null;
        for (TipoDespesaTO to : listTO) {
            form = this.toTOForm(to);
            if (form != null) {
                forms.add(form);
            }
            form = null;
        }
        
        return forms;
    }
    
    private TipoDespesaForm toTOForm(final TipoDespesaTO to) {
        TipoDespesaForm form = null;
        
        if (to != null) {
            form  = new TipoDespesaForm();
            form.setDescricao(to.getDescricao());
            form.setNome(to.getNome());
            form.setIdentificador(to.getIdentificador());
        }
        
        return form;
    }

    public void create(TipoDespesaForm tipodespesaForm) throws I18NException {
        
        TipoDespesaTO to = new TipoDespesaTO();
        to.setNome(tipodespesaForm.getNome());
        to.setDescricao(tipodespesaForm.getDescricao());
        to.setUsuarioIdentificador(tipodespesaForm.getUsuarioIdentificador());
        
        try {
            getService().create(to);
        } catch (Exception ex) {
            I18NException i18nex = new I18NException();
            i18nex.add("tipodespesa.already.exists", new Object[]{to.getNome()});
            throw i18nex;
        }
        
    }

    public void delete(Object pk)  throws I18NException {
        TipoDespesaTO tipo = getService().find(pk);
        getService().destroy(tipo);
    }
}
